Graphics processing is the most processor-intensive and memory-consuming component of the computer system. Thus, the industry is constantly searching for ways to optimize graphics processing in order to produce the high-quality images users have come to expect at an affordable price.
Data to be processed by modern graphics processors may be manipulated in many different ways, depending on resources and the desired image quality. For example, textures may be generated by processing data using a bi-linear filter which calculates a weighted average for each pixel from four texels adjacent to the point in a texture that most closely maps to the pixel. Or, the data may be processed using a tri-linear filter which uses mipmap levels just less and greater in resolution to the pixel, and also uses the four texels in each level that most closely map to the pixel. There are many different states under which data may be processed. It is often necessary to use different states to process different data even in a single refresh cycle. Some data comprising pixels or primitives intended for display on a screen may require one state and some may require a second or third state. For example, for a dithering process, a series of primitives may be processed using a first dithering algorithm, and a next series of primitives may be processed using a different dithering algorithm. Or, for filtering, a first primitive may require tri-linear filtering, but a next primitive may only need point sampling. Thus, in addition to the complicated arithmetic operations required to be performed on graphics data, the graphics processor designer must provide the capability to perform these operations in accordance with a specific state. This entails keeping track of an associated state for each primitive to be processed.
A first example of a system of tracking and applying the state of a primitive is displayed in Figure 1a. In this system, the state data 108 to be applied to all primitives are stored in a register which is accessed by the processing elements 102 upon processing primitive data 104. The primitive data 104 is transmitted through a pipeline 100 through the various processing elements 102. This system saves on cost; however, if the state changes between a first and second primitive, the system must wait for the pipeline 100 to flush all data relating to the first primitive before applying the new state to the second primitive. This causes delays in processing and display which may be unacceptable to the user.
A second example of a system of tracking and applying the state of a primitive is displayed in Figure 1b. In this system, the state data 108 is transmitted along with each primitive 104. Thus, in this embodiment, if the state changes between two primitives 104, the second primitive 104 can be immediately operated upon in accordance with the new state 108. However, this configuration requires more hardware to store the state data 108 associated with each primitive 104 and is very expensive in implementation.
Thus, a system is needed for processing graphics data which can respond quickly to state changes while minimizing the use of additional hardware.